package org.infodavid.common.model.components;

import org.infodavid.common.model.behaviors.ILocalizable;
import org.infodavid.common.persistence.IBasicDataObject;
import org.infodavid.common.persistence.ICommented;
import org.infodavid.common.persistence.INamed;

/**
 * The Interface ILocation.
 */
public interface ILocation extends IBasicDataObject, INamed, ICommented, ILocalizable {

  /**
   * The Enum ADDRESS_TYPE.
   */
  enum ELocationType {

    /** The HOME. */
    HOME,

    /** The OFFICE. */
    OFFICE,

    /** The OTHER. */
    OTHER
  }

  /** The ADDRESS. */
  String ADDRESS = "address";

  /** The constant MAX_LENGTH_ADDRESS. */
  int MAX_LENGTH_ADDRESS = 512;

  /** The CITY. */
  String CITY = "city";

  /** The COUNTRY. */
  String COUNTRY = "country";

  /** The LOCATION. */
  String LOCATION = "location";

  /** The constant MAX_LENGTH_CITY. */
  int MAX_LENGTH_CITY = 96;

  /** The constant MAX_LENGTH_COUNTRY. */
  int MAX_LENGTH_COUNTRY = 32;

  /** The constant MAX_LENGTH_STATE. */
  int MAX_LENGTH_STATE = 32;

  /** The constant MAX_LENGTH_CITY. */
  int MAX_LENGTH_ZIP_CODE = 16;

  /** The STATE. */
  String STATE = "state";

  /** The TYPE. */
  String TYPE = "type";

  /** The CODE. */
  String ZIP_CODE = "zipCode";

  /**
   * Gets the address.
   * @return the address
   */
  String getAddress();

  /**
   * Sets the address.
   * @param value the value
   */
  void setAddress(String value);

  /**
   * Gets the city.
   * @return the city
   */
  String getCity();

  /**
   * Gets the country.
   * @return the country
   */
  String getCountry();

  /**
   * Gets the state.
   * @return the state
   */
  String getState();

  /**
   * Gets the type.
   * @return the type
   */
  ELocationType getType();

  /**
   * Gets the zip code.
   * @return the zip code
   */
  String getZipCode();

  /**
   * Sets the city.
   * @param value the value
   */
  void setCity(String value);

  /**
   * Sets the country.
   * @param value the value
   */
  void setCountry(String value);

  /**
   * Sets the state.
   * @param value the value
   */
  void setState(String value);

  /**
   * Sets the type.
   * @param value the value
   */
  void setType(ELocationType value);

  /**
   * Sets the zip code.
   * @param value the value
   */
  void setZipCode(String value);
}
